{
 "cells": [
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "# 概述"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "    简单来说，k-近邻算法采用测量不同特征值之间的距离方法进行分类。\n",
    " - 优点：精度高、对异常值不敏感、无数据输入假定\n",
    " - 缺点：计算复杂度高、空间复杂度高\n",
    " - 适用数据范围：数值型和标称型"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "***\n",
    "## k-近邻算法的一般流程"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "- （1）收集数据\n",
    "- （2）准备数据：计算距离所需要的数值，最好是结构化的数据格式；\n",
    "- （3）分析数据\n",
    "- （4）训练算法：该步骤不适用于k-近邻算法；\n",
    "- （5）测试算法：计算错误率；\n",
    "- （6）使用算法：首先需要输入样本数据和结构化的输出结果，然后运行k-近邻算法判断输入数据分别属于哪个分类，最后应用对计算出的分类执行后续的处理；"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "***\n",
    "## 准备：使用python导入数据"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 1,
   "metadata": {},
   "outputs": [],
   "source": [
    "import numpy as np #科学计算包\n",
    "import operator    #运算符模块\n",
    "\n",
    "#创建数据集和标签\n",
    "def createDataSet():\n",
    "    group=np.array([[1.0,1.1], [1.0,1.0], [0,0], [0,0.1]])\n",
    "    labels=['A','A','B','B']\n",
    "    return group,labels\n",
    "group,labels=createDataSet()"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "***\n",
    "## 从文本文件中解析数据"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "    对未知类别属性的数据集中的每个点依次执行以下操作：\n",
    "- （1）计算已知类别数据集中的点与当前点之间的距离；\n",
    "- （2）按照距离递增次序排序；\n",
    "- （3）选取当前点距离最小的k个点；\n",
    "- （4）确定前k个点所在类别的出现频率；\n",
    "- （5）返回前k个点出现频率最高的类别作为当前点的预测分类；"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "***\n",
    "## k-近邻算法"
   ]
  },
  {
   "attachments": {
    "image.png": {
     "image/png": "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"
    }
   },
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "欧式距离公式：\n",
    "![image.png](attachment:image.png)"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 2,
   "metadata": {},
   "outputs": [],
   "source": [
    "def classify(inX,dataSet,labels,k):    #inX是要分类的输入向量；dataSet是训练样本集；labels是标签向量；k表示最近邻居的数据\n",
    "    dataSetSize=dataSet.shape[0]       #数据集大小，行数\n",
    "    \n",
    "    #计算距离\n",
    "    #numpy.tile(A,reps)共有2个参数，A指待输入数组，reps则决定A重复的次数。整个函数用于重复数组A来构建新的数组。\n",
    "    #reps若是这样的(2,3)，则表示2行3列\n",
    "    diffMat=np.tile(inX,(dataSetSize,1))-dataSet #tile构建的新数组，纵向复制4次，横向复制1次\n",
    "    #print('tile:\\n',np.tile(inX,(dataSetSize,1)))\n",
    "    #print(\"diffMat:\\n\",diffMat)\n",
    "    sqDiffMat=diffMat**2               #求平方\n",
    "    #print(\"sqDiffMat:\\n\",sqDiffMat)\n",
    "    sqDistances=sqDiffMat.sum(axis=1)  #行求和\n",
    "    #print('sqDistances:\\n',sqDistances)\n",
    "    distances=sqDistances**0.5         #开方，求出欧式距离\n",
    "    #print(\"distances:\\n\",distances)\n",
    "    \n",
    "    #距离排序\n",
    "    sortedDistIndicies=distances.argsort()  #argsort()表示对数组a进行从大到小排序，返回索引值\n",
    "    #print(\"sortedDistIndicies:\\n\",sortedDistIndicies)\n",
    "    \n",
    "    #选择距离最小的k个点\n",
    "    classCount={ }\n",
    "    for i in range(k):\n",
    "        voteIlabel=labels[sortedDistIndicies[i]]\n",
    "        #dict.get(a,b):a是键值key，如果存在dict存在键值a，则函数返回dict[a]；否则返回b，如果没有定义b参数，则返回None\n",
    "        classCount[voteIlabel]=classCount.get(voteIlabel,0)+1 \n",
    "    #print(\"classCount:\\n\",classCount)\n",
    "    \n",
    "    #排序\n",
    "    #sorted(iterable, key=None, reverse=False)  \n",
    "    #iterable 表示指定的序列，key 参数可以自定义排序规则；reverse 参数指定以升序（False，默认）还是降序（True）进行排序\n",
    "    sortedClassCount=sorted(classCount.items(),key=operator.itemgetter(1),reverse=True)\n",
    "    #operator.itemgetter(1)表示取classCount的value，若是0的话则取的是key\n",
    "    #print(\"sortedClassCount:\\n\",sortedClassCount)\n",
    "    return sortedClassCount[0][0]"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 3,
   "metadata": {},
   "outputs": [
    {
     "data": {
      "text/plain": [
       "'B'"
      ]
     },
     "execution_count": 3,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "#预测数据所在分类\n",
    "classify([0,0],group,labels,3)"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "***\n",
    "## 如何测试分类器"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "&emsp;&emsp;通过大量的测试数据，我们可以得到分类器的错误率---分类器给出错误结果的次数除以测试执行的总数。错误率是常用的评估方法，主要用于评估分类器在某个数据集上的执行效果。完美分类器的错误率为0，最差的分类器的错误率是1.0。"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "***\n",
    "# 使用k-近邻算法改进约会网站的配对效果"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "## 背景"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "&emsp;&emsp;我的朋友一直使用在线约会网站寻找适合的约会对象，尽管约会网站会推送不同的人选，但她没有从中找到喜欢的人。经过一番总结，发现三类型的人；\n",
    "- 不喜欢的人\n",
    "- 魅力一般的人\n",
    "- 极具魅力的人\n",
    "\n",
    "尽管发现了规律，依旧无法将网站匹配对象归入恰当的分类，他觉得可以在周一到周五约会那些魅力一般的人，而周末则更喜欢与那些极具魅力的人为伴。此外她还收集了一些网站未曾记录的数剧信息，她希望为这些数剧匹配对象归属。"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "## 步骤"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "- （1）收集数据\n",
    "- （2）准备数据：解析数据\n",
    "- （3）分析数据：使用Matplotlib解析文本文件\n",
    "- （4）训练算法：该步骤不适用于k-近邻算法\n",
    "- （5）测试算法：使用海伦提供的部分数据作为测试样本\n",
    "- （6）使用算法：判断对方是否自己喜欢的类型"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "## 准备数据"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "海伦的样本主要包括以下3种特征：\n",
    "- （1）每年获得的飞行常客里程数；\n",
    "- （2）玩视频游戏所耗时间百分比；\n",
    "- （3）每周消费的冰淇淋公升数；"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 4,
   "metadata": {},
   "outputs": [],
   "source": [
    "#file2matrix（）：处理输入格式问题\n",
    "#输入：文件名字符串\n",
    "#输出：训练样本矩阵和类标签向量\n",
    "\n",
    "def file2matrix(filename):\n",
    "    fr=open(filename)\n",
    "    arrayOfLines=fr.readlines()\n",
    "    numberOfLines=len(arrayOfLines)    #获得文件行数\n",
    "    returnMat=np.zeros((numberOfLines,3)) #创建返回的NumPy矩阵\n",
    "    classLabelVector=[]                #类标签向量\n",
    "    index=0\n",
    "    #解析文件数据得到列表\n",
    "    for line in arrayOfLines:\n",
    "        line=line.strip()              # strip() 方法用于移除字符串头尾指定的字符（默认为空格或换行符）或字符序列\n",
    "        listFromLine=line.split('\\t')\n",
    "        returnMat[index,:]=listFromLine[0:3]\n",
    "        #print(\"returnMat:\\n\",returnMat)\n",
    "        classLabelVector.append(int(listFromLine[-1])) #[-1]表示取最后一列，利用这种负索引，可以很便捷\n",
    "        index+=1\n",
    "    print(\"训练样本矩阵：\\n\",returnMat)\n",
    "    print(\"类标签向量：\\n\",classLabelVector[0:20])     #取前20个做展示\n",
    "    return returnMat,classLabelVector"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 5,
   "metadata": {},
   "outputs": [
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "训练样本矩阵：\n",
      " [[4.0920000e+04 8.3269760e+00 9.5395200e-01]\n",
      " [1.4488000e+04 7.1534690e+00 1.6739040e+00]\n",
      " [2.6052000e+04 1.4418710e+00 8.0512400e-01]\n",
      " ...\n",
      " [2.6575000e+04 1.0650102e+01 8.6662700e-01]\n",
      " [4.8111000e+04 9.1345280e+00 7.2804500e-01]\n",
      " [4.3757000e+04 7.8826010e+00 1.3324460e+00]]\n",
      "类标签向量：\n",
      " [3, 2, 1, 1, 1, 1, 3, 3, 1, 3, 1, 1, 2, 1, 1, 1, 1, 1, 2, 3]\n"
     ]
    }
   ],
   "source": [
    "datingDataMat,datingLabels=file2matrix('datingTestSet2.txt')"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "## 分析数据：使用Matplotlib创建散点图"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 6,
   "metadata": {},
   "outputs": [
    {
     "data": {
      "image/png": "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\n",
      "text/plain": [
       "<Figure size 432x288 with 1 Axes>"
      ]
     },
     "metadata": {
      "needs_background": "light"
     },
     "output_type": "display_data"
    }
   ],
   "source": [
    "import matplotlib.pyplot as plt\n",
    "fig =plt.figure()\n",
    "ax=fig.add_subplot(111)\n",
    "#使用矩阵的第二和第三列数据\n",
    "ax.scatter(datingDataMat[:,1],datingDataMat[:,2])\n",
    "plt.show()"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "## 准备数据：归一化数值"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "当某一个特征数值远大于另外两个特征数值时，我们可以将数值归一化，认为这三种特征同等重要。  \n",
    "归一化公式：newValue=（oldValue-min）/（max-min）"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 7,
   "metadata": {},
   "outputs": [],
   "source": [
    "#归一化特征值\n",
    "def autoNorm(dataSet):\n",
    "    minVals=dataSet.min(0)    #参数0使得函数可以从列中取最小值，而不是从行中取最小值\n",
    "    maxVals=dataSet.max(0)    #同理\n",
    "    ranges=maxVals-minVals     #分母\n",
    "    normDataSet=np.zeros(np.shape(dataSet))\n",
    "    m=dataSet.shape[0]        #取行数\n",
    "    normDataSet=dataSet-np.tile(minVals,(m,1)) #np.tile表示重构矩阵\n",
    "    normDataSet=normDataSet/np.tile(ranges,(m,1))\n",
    "    return normDataSet,ranges,minVals"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 8,
   "metadata": {},
   "outputs": [],
   "source": [
    "normMat,ranges,minVals=autoNorm(datingDataMat)"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "## 测试算法：作为完整程序验证分类器"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 9,
   "metadata": {},
   "outputs": [],
   "source": [
    "def datingClassTest():\n",
    "    hoRatio=0.10\n",
    "    #读取数据\n",
    "    datingDataMat,datingLabels=file2matrix('datingTestSet2.txt')\n",
    "    #归一化特征值\n",
    "    normMat,ranges,minVals=autoNorm(datingDataMat)\n",
    "    m=normMat.shape[0]\n",
    "    #测试样本，剩余的都是训练样本\n",
    "    numTestVecs=int(m*hoRatio)\n",
    "    errorCount=0.0\n",
    "    #开始训练\n",
    "    for i in range(numTestVecs):\n",
    "        #k-近邻算法\n",
    "        #classify(inX,dataSet,labels,k)，inX是要分类的输入向量（测试样本）；dataSet是训练样本集；labels是标签向量；k表示最近邻居的数据\n",
    "        classifierResult=classify(normMat[i,:],normMat[numTestVecs:m,:],datingLabels[numTestVecs:m],3)\n",
    "        print(\"分类器得出的结果: %d ,真实的结果是：%d\"%(classifierResult,datingLabels[i]))\n",
    "        if (classifierResult != datingLabels[i]):\n",
    "            errorCount+=1.0\n",
    "    print(\"错误率：%f\"%(errorCount/float(numTestVecs)))"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 10,
   "metadata": {},
   "outputs": [
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "训练样本矩阵：\n",
      " [[4.0920000e+04 8.3269760e+00 9.5395200e-01]\n",
      " [1.4488000e+04 7.1534690e+00 1.6739040e+00]\n",
      " [2.6052000e+04 1.4418710e+00 8.0512400e-01]\n",
      " ...\n",
      " [2.6575000e+04 1.0650102e+01 8.6662700e-01]\n",
      " [4.8111000e+04 9.1345280e+00 7.2804500e-01]\n",
      " [4.3757000e+04 7.8826010e+00 1.3324460e+00]]\n",
      "类标签向量：\n",
      " [3, 2, 1, 1, 1, 1, 3, 3, 1, 3, 1, 1, 2, 1, 1, 1, 1, 1, 2, 3]\n",
      "分类器得出的结果: 3 ,真实的结果是：3\n",
      "分类器得出的结果: 2 ,真实的结果是：2\n",
      "分类器得出的结果: 1 ,真实的结果是：1\n",
      "分类器得出的结果: 1 ,真实的结果是：1\n",
      "分类器得出的结果: 1 ,真实的结果是：1\n",
      "分类器得出的结果: 1 ,真实的结果是：1\n",
      "分类器得出的结果: 3 ,真实的结果是：3\n",
      "分类器得出的结果: 3 ,真实的结果是：3\n",
      "分类器得出的结果: 1 ,真实的结果是：1\n",
      "分类器得出的结果: 3 ,真实的结果是：3\n",
      "分类器得出的结果: 1 ,真实的结果是：1\n",
      "分类器得出的结果: 1 ,真实的结果是：1\n",
      "分类器得出的结果: 2 ,真实的结果是：2\n",
      "分类器得出的结果: 1 ,真实的结果是：1\n",
      "分类器得出的结果: 1 ,真实的结果是：1\n",
      "分类器得出的结果: 1 ,真实的结果是：1\n",
      "分类器得出的结果: 1 ,真实的结果是：1\n",
      "分类器得出的结果: 1 ,真实的结果是：1\n",
      "分类器得出的结果: 2 ,真实的结果是：2\n",
      "分类器得出的结果: 3 ,真实的结果是：3\n",
      "分类器得出的结果: 2 ,真实的结果是：2\n",
      "分类器得出的结果: 1 ,真实的结果是：1\n",
      "分类器得出的结果: 3 ,真实的结果是：2\n",
      "分类器得出的结果: 3 ,真实的结果是：3\n",
      "分类器得出的结果: 2 ,真实的结果是：2\n",
      "分类器得出的结果: 3 ,真实的结果是：3\n",
      "分类器得出的结果: 2 ,真实的结果是：2\n",
      "分类器得出的结果: 3 ,真实的结果是：3\n",
      "分类器得出的结果: 2 ,真实的结果是：2\n",
      "分类器得出的结果: 1 ,真实的结果是：1\n",
      "分类器得出的结果: 3 ,真实的结果是：3\n",
      "分类器得出的结果: 1 ,真实的结果是：1\n",
      "分类器得出的结果: 3 ,真实的结果是：3\n",
      "分类器得出的结果: 1 ,真实的结果是：1\n",
      "分类器得出的结果: 2 ,真实的结果是：2\n",
      "分类器得出的结果: 1 ,真实的结果是：1\n",
      "分类器得出的结果: 1 ,真实的结果是：1\n",
      "分类器得出的结果: 2 ,真实的结果是：2\n",
      "分类器得出的结果: 3 ,真实的结果是：3\n",
      "分类器得出的结果: 3 ,真实的结果是：3\n",
      "分类器得出的结果: 1 ,真实的结果是：1\n",
      "分类器得出的结果: 2 ,真实的结果是：2\n",
      "分类器得出的结果: 3 ,真实的结果是：3\n",
      "分类器得出的结果: 3 ,真实的结果是：3\n",
      "分类器得出的结果: 3 ,真实的结果是：3\n",
      "分类器得出的结果: 1 ,真实的结果是：1\n",
      "分类器得出的结果: 1 ,真实的结果是：1\n",
      "分类器得出的结果: 1 ,真实的结果是：1\n",
      "分类器得出的结果: 1 ,真实的结果是：1\n",
      "分类器得出的结果: 2 ,真实的结果是：2\n",
      "分类器得出的结果: 2 ,真实的结果是：2\n",
      "分类器得出的结果: 1 ,真实的结果是：1\n",
      "分类器得出的结果: 3 ,真实的结果是：3\n",
      "分类器得出的结果: 2 ,真实的结果是：2\n",
      "分类器得出的结果: 2 ,真实的结果是：2\n",
      "分类器得出的结果: 2 ,真实的结果是：2\n",
      "分类器得出的结果: 2 ,真实的结果是：2\n",
      "分类器得出的结果: 3 ,真实的结果是：3\n",
      "分类器得出的结果: 1 ,真实的结果是：1\n",
      "分类器得出的结果: 2 ,真实的结果是：2\n",
      "分类器得出的结果: 1 ,真实的结果是：1\n",
      "分类器得出的结果: 2 ,真实的结果是：2\n",
      "分类器得出的结果: 2 ,真实的结果是：2\n",
      "分类器得出的结果: 2 ,真实的结果是：2\n",
      "分类器得出的结果: 2 ,真实的结果是：2\n",
      "分类器得出的结果: 2 ,真实的结果是：2\n",
      "分类器得出的结果: 3 ,真实的结果是：3\n",
      "分类器得出的结果: 2 ,真实的结果是：2\n",
      "分类器得出的结果: 3 ,真实的结果是：3\n",
      "分类器得出的结果: 1 ,真实的结果是：1\n",
      "分类器得出的结果: 2 ,真实的结果是：2\n",
      "分类器得出的结果: 3 ,真实的结果是：3\n",
      "分类器得出的结果: 2 ,真实的结果是：2\n",
      "分类器得出的结果: 2 ,真实的结果是：2\n",
      "分类器得出的结果: 3 ,真实的结果是：1\n",
      "分类器得出的结果: 3 ,真实的结果是：3\n",
      "分类器得出的结果: 1 ,真实的结果是：1\n",
      "分类器得出的结果: 1 ,真实的结果是：1\n",
      "分类器得出的结果: 3 ,真实的结果是：3\n",
      "分类器得出的结果: 3 ,真实的结果是：3\n",
      "分类器得出的结果: 1 ,真实的结果是：1\n",
      "分类器得出的结果: 2 ,真实的结果是：2\n",
      "分类器得出的结果: 3 ,真实的结果是：3\n",
      "分类器得出的结果: 3 ,真实的结果是：1\n",
      "分类器得出的结果: 3 ,真实的结果是：3\n",
      "分类器得出的结果: 1 ,真实的结果是：1\n",
      "分类器得出的结果: 2 ,真实的结果是：2\n",
      "分类器得出的结果: 2 ,真实的结果是：2\n",
      "分类器得出的结果: 1 ,真实的结果是：1\n",
      "分类器得出的结果: 1 ,真实的结果是：1\n",
      "分类器得出的结果: 3 ,真实的结果是：3\n",
      "分类器得出的结果: 2 ,真实的结果是：3\n",
      "分类器得出的结果: 1 ,真实的结果是：1\n",
      "分类器得出的结果: 2 ,真实的结果是：2\n",
      "分类器得出的结果: 1 ,真实的结果是：1\n",
      "分类器得出的结果: 3 ,真实的结果是：3\n",
      "分类器得出的结果: 3 ,真实的结果是：3\n",
      "分类器得出的结果: 2 ,真实的结果是：2\n",
      "分类器得出的结果: 1 ,真实的结果是：1\n",
      "分类器得出的结果: 3 ,真实的结果是：1\n",
      "错误率：0.050000\n"
     ]
    }
   ],
   "source": [
    "datingClassTest()"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "## 使用算法：构建完整可用系统"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "根据输入他人信息，程序会给出海伦喜欢对方的程度。"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 11,
   "metadata": {},
   "outputs": [],
   "source": [
    "def classifPerson():\n",
    "    resultList=['not at all' , 'in small doses' , 'in large doses']\n",
    "    #输入\n",
    "    percentTats=float(input(\"percentage of time spent playing video games ?\"))\n",
    "    ffMiles=float(input(\"freguent flier miles earned per year ?\"))\n",
    "    iceCream=float(input(\"liters of ice cream consumed per year ?\"))\n",
    "    #处理输入格式\n",
    "    datingDataMat,datingLabels=file2matrix('datingTestSet2.txt')\n",
    "    #归一化特征值\n",
    "    normMat,ranges,minVals=autoNorm(datingDataMat)\n",
    "    inArr = np.array([ffMiles,percentTats,iceCream])\n",
    "    #使用算法\n",
    "    classifierResult=classify((inArr-minVals)/ranges,normMat,datingLabels,3)\n",
    "    #输出\n",
    "    print(\"You will probably like this person:\",resultList[classifierResult-1])"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 12,
   "metadata": {},
   "outputs": [],
   "source": [
    "#调用函数\n",
    "#classifPerson()"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "***\n",
    "# 手写识别系统"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "&emsp;&emsp;为了简单起见，这里构造的系统只能识别数字0到9。需要识别的数字已经使用图像处理软件，处理成具有相同的色彩和大小：宽高是32像素*32像素的黑白图像。"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "## 步骤"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "- （1）收集数据；\n",
    "- （2）准备数据 ：编写函数classify(),将图像格式转换为分类器使用的list格式；\n",
    "- （3）分析数据；\n",
    "- （4）训练算法：该步骤不适用于k-近邻算法；\n",
    "- （5）测试算法；\n",
    "- （6）使用算法；"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "## 准备数据：将图像转换为测试向量"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "&emsp;&emsp;图像存在两个目录内，目录trainingDigits中包含大约2000个例子，用于训练分类器；目录testDigits中包含900个测试数据，用于测试分类器的效果。"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 13,
   "metadata": {},
   "outputs": [],
   "source": [
    "#将一个32*32的二进制图像矩阵转换为1*1024的向量，这样就可以使用之前的分类器处理数图像信息了。\n",
    "def img2vector(filename):\n",
    "    #返回的向量\n",
    "    returnVect=np.zeros((1,1024))\n",
    "    fr=open(filename)\n",
    "    for i in range(32):\n",
    "        lineStr=fr.readline()\n",
    "        for j in range(32):\n",
    "            returnVect[0,32*i+j]=int(lineStr[j])\n",
    "    return returnVect"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 14,
   "metadata": {},
   "outputs": [],
   "source": [
    "#测试函数\n",
    "testVector=img2vector('testDigits/0_13.txt')"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 15,
   "metadata": {},
   "outputs": [
    {
     "data": {
      "text/plain": [
       "array([0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 1., 1., 1.,\n",
       "       1., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0.])"
      ]
     },
     "execution_count": 15,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "testVector[0,0:31]"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "## 测试算法：使用k-近邻算法识别手写数字"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 16,
   "metadata": {},
   "outputs": [],
   "source": [
    "#将数据输入到分类器，检测分类器的执行效果\n",
    "from os import listdir\n",
    "def handwritingClassTest():\n",
    "    #手写标签\n",
    "    hwLabels=[]\n",
    "    #训练文件列表\n",
    "    trainingFileList=listdir('trainingDigits') #获取目录内容\n",
    "    m=len(trainingFileList)\n",
    "    #m行1024列的训练矩阵\n",
    "    trainingMat=np.zeros((m,1024))\n",
    "    #从文件名解析分类数字\n",
    "    for i in range(m):\n",
    "        #文件9_45.txt表示它是数字9的第45个实例\n",
    "        fileNameStr=trainingFileList[i]\n",
    "        #取9_45.txt的前面，即9_45\n",
    "        fileStr=fileNameStr.split('.')[0]\n",
    "        #print('fileStr:\\n',fileStr)\n",
    "        classNumStr=int(fileStr.split('_')[0])\n",
    "        hwLabels.append(classNumStr)\n",
    "        trainingMat[i,:]=img2vector('trainingDigits/%s'%fileNameStr)\n",
    "    #测试样例列表\n",
    "    testFileList=listdir('testDigits')\n",
    "    errorCount=0.0\n",
    "    mTest=len(testFileList)\n",
    "    for j in range(mTest):\n",
    "        fileNameStr=testFileList[j]\n",
    "        fileStr=fileNameStr.split('.')[0]\n",
    "        classNumStr=int(fileStr.split('_')[0])\n",
    "        vectorUnderTest=img2vector('testDigits/%s' % fileNameStr)\n",
    "        #k-近邻算法\n",
    "        classifierResult=classify(vectorUnderTest,trainingMat,hwLabels,3)\n",
    "        print('the classifier came back with: %d ,the real answer is : %d'%(classifierResult,classNumStr))\n",
    "        if (classifierResult!=classNumStr): errorCount+=1.0\n",
    "    print('\\n the total number of errors is : %d'%errorCount)\n",
    "    print('\\n the total error rate is : %f'%(errorCount/float(mTest)))"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 17,
   "metadata": {},
   "outputs": [
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "the classifier came back with: 0 ,the real answer is : 0\n",
      "the classifier came back with: 0 ,the real answer is : 0\n",
      "the classifier came back with: 0 ,the real answer is : 0\n",
      "the classifier came back with: 0 ,the real answer is : 0\n",
      "the classifier came back with: 0 ,the real answer is : 0\n",
      "the classifier came back with: 0 ,the real answer is : 0\n",
      "the classifier came back with: 0 ,the real answer is : 0\n",
      "the classifier came back with: 0 ,the real answer is : 0\n",
      "the classifier came back with: 0 ,the real answer is : 0\n",
      "the classifier came back with: 0 ,the real answer is : 0\n",
      "the classifier came back with: 0 ,the real answer is : 0\n",
      "the classifier came back with: 0 ,the real answer is : 0\n",
      "the classifier came back with: 0 ,the real answer is : 0\n",
      "the classifier came back with: 0 ,the real answer is : 0\n",
      "the classifier came back with: 0 ,the real answer is : 0\n",
      "the classifier came back with: 0 ,the real answer is : 0\n",
      "the classifier came back with: 0 ,the real answer is : 0\n",
      "the classifier came back with: 0 ,the real answer is : 0\n",
      "the classifier came back with: 0 ,the real answer is : 0\n",
      "the classifier came back with: 0 ,the real answer is : 0\n",
      "the classifier came back with: 0 ,the real answer is : 0\n",
      "the classifier came back with: 0 ,the real answer is : 0\n",
      "the classifier came back with: 0 ,the real answer is : 0\n",
      "the classifier came back with: 0 ,the real answer is : 0\n",
      "the classifier came back with: 0 ,the real answer is : 0\n",
      "the classifier came back with: 0 ,the real answer is : 0\n",
      "the classifier came back with: 0 ,the real answer is : 0\n",
      "the classifier came back with: 0 ,the real answer is : 0\n",
      "the classifier came back with: 0 ,the real answer is : 0\n",
      "the classifier came back with: 0 ,the real answer is : 0\n",
      "the classifier came back with: 0 ,the real answer is : 0\n",
      "the classifier came back with: 0 ,the real answer is : 0\n",
      "the classifier came back with: 0 ,the real answer is : 0\n",
      "the classifier came back with: 0 ,the real answer is : 0\n",
      "the classifier came back with: 0 ,the real answer is : 0\n",
      "the classifier came back with: 0 ,the real answer is : 0\n",
      "the classifier came back with: 0 ,the real answer is : 0\n",
      "the classifier came back with: 0 ,the real answer is : 0\n",
      "the classifier came back with: 0 ,the real answer is : 0\n",
      "the classifier came back with: 0 ,the real answer is : 0\n",
      "the classifier came back with: 0 ,the real answer is : 0\n",
      "the classifier came back with: 0 ,the real answer is : 0\n",
      "the classifier came back with: 0 ,the real answer is : 0\n",
      "the classifier came back with: 0 ,the real answer is : 0\n",
      "the classifier came back with: 0 ,the real answer is : 0\n",
      "the classifier came back with: 0 ,the real answer is : 0\n",
      "the classifier came back with: 0 ,the real answer is : 0\n",
      "the classifier came back with: 0 ,the real answer is : 0\n",
      "the classifier came back with: 0 ,the real answer is : 0\n",
      "the classifier came back with: 0 ,the real answer is : 0\n",
      "the classifier came back with: 0 ,the real answer is : 0\n",
      "the classifier came back with: 0 ,the real answer is : 0\n",
      "the classifier came back with: 0 ,the real answer is : 0\n",
      "the classifier came back with: 0 ,the real answer is : 0\n",
      "the classifier came back with: 0 ,the real answer is : 0\n",
      "the classifier came back with: 0 ,the real answer is : 0\n",
      "the classifier came back with: 0 ,the real answer is : 0\n",
      "the classifier came back with: 0 ,the real answer is : 0\n",
      "the classifier came back with: 0 ,the real answer is : 0\n",
      "the classifier came back with: 0 ,the real answer is : 0\n",
      "the classifier came back with: 0 ,the real answer is : 0\n",
      "the classifier came back with: 0 ,the real answer is : 0\n",
      "the classifier came back with: 0 ,the real answer is : 0\n",
      "the classifier came back with: 0 ,the real answer is : 0\n",
      "the classifier came back with: 0 ,the real answer is : 0\n",
      "the classifier came back with: 0 ,the real answer is : 0\n",
      "the classifier came back with: 0 ,the real answer is : 0\n",
      "the classifier came back with: 0 ,the real answer is : 0\n",
      "the classifier came back with: 0 ,the real answer is : 0\n",
      "the classifier came back with: 0 ,the real answer is : 0\n",
      "the classifier came back with: 0 ,the real answer is : 0\n",
      "the classifier came back with: 0 ,the real answer is : 0\n",
      "the classifier came back with: 0 ,the real answer is : 0\n",
      "the classifier came back with: 0 ,the real answer is : 0\n",
      "the classifier came back with: 0 ,the real answer is : 0\n",
      "the classifier came back with: 0 ,the real answer is : 0\n",
      "the classifier came back with: 0 ,the real answer is : 0\n",
      "the classifier came back with: 0 ,the real answer is : 0\n",
      "the classifier came back with: 0 ,the real answer is : 0\n",
      "the classifier came back with: 0 ,the real answer is : 0\n",
      "the classifier came back with: 0 ,the real answer is : 0\n",
      "the classifier came back with: 0 ,the real answer is : 0\n",
      "the classifier came back with: 0 ,the real answer is : 0\n",
      "the classifier came back with: 0 ,the real answer is : 0\n",
      "the classifier came back with: 0 ,the real answer is : 0\n",
      "the classifier came back with: 0 ,the real answer is : 0\n",
      "the classifier came back with: 0 ,the real answer is : 0\n",
      "the classifier came back with: 1 ,the real answer is : 1\n",
      "the classifier came back with: 1 ,the real answer is : 1\n",
      "the classifier came back with: 1 ,the real answer is : 1\n",
      "the classifier came back with: 1 ,the real answer is : 1\n",
      "the classifier came back with: 1 ,the real answer is : 1\n",
      "the classifier came back with: 1 ,the real answer is : 1\n",
      "the classifier came back with: 1 ,the real answer is : 1\n",
      "the classifier came back with: 1 ,the real answer is : 1\n",
      "the classifier came back with: 1 ,the real answer is : 1\n",
      "the classifier came back with: 1 ,the real answer is : 1\n",
      "the classifier came back with: 1 ,the real answer is : 1\n",
      "the classifier came back with: 1 ,the real answer is : 1\n",
      "the classifier came back with: 1 ,the real answer is : 1\n",
      "the classifier came back with: 1 ,the real answer is : 1\n",
      "the classifier came back with: 1 ,the real answer is : 1\n",
      "the classifier came back with: 1 ,the real answer is : 1\n",
      "the classifier came back with: 1 ,the real answer is : 1\n",
      "the classifier came back with: 1 ,the real answer is : 1\n",
      "the classifier came back with: 1 ,the real answer is : 1\n",
      "the classifier came back with: 1 ,the real answer is : 1\n",
      "the classifier came back with: 1 ,the real answer is : 1\n",
      "the classifier came back with: 1 ,the real answer is : 1\n",
      "the classifier came back with: 1 ,the real answer is : 1\n",
      "the classifier came back with: 1 ,the real answer is : 1\n",
      "the classifier came back with: 1 ,the real answer is : 1\n",
      "the classifier came back with: 1 ,the real answer is : 1\n",
      "the classifier came back with: 1 ,the real answer is : 1\n",
      "the classifier came back with: 1 ,the real answer is : 1\n",
      "the classifier came back with: 1 ,the real answer is : 1\n",
      "the classifier came back with: 1 ,the real answer is : 1\n",
      "the classifier came back with: 1 ,the real answer is : 1\n",
      "the classifier came back with: 1 ,the real answer is : 1\n",
      "the classifier came back with: 1 ,the real answer is : 1\n",
      "the classifier came back with: 1 ,the real answer is : 1\n",
      "the classifier came back with: 1 ,the real answer is : 1\n",
      "the classifier came back with: 1 ,the real answer is : 1\n",
      "the classifier came back with: 1 ,the real answer is : 1\n",
      "the classifier came back with: 1 ,the real answer is : 1\n",
      "the classifier came back with: 1 ,the real answer is : 1\n",
      "the classifier came back with: 1 ,the real answer is : 1\n",
      "the classifier came back with: 1 ,the real answer is : 1\n",
      "the classifier came back with: 1 ,the real answer is : 1\n",
      "the classifier came back with: 1 ,the real answer is : 1\n",
      "the classifier came back with: 1 ,the real answer is : 1\n",
      "the classifier came back with: 1 ,the real answer is : 1\n",
      "the classifier came back with: 1 ,the real answer is : 1\n",
      "the classifier came back with: 1 ,the real answer is : 1\n",
      "the classifier came back with: 1 ,the real answer is : 1\n",
      "the classifier came back with: 1 ,the real answer is : 1\n",
      "the classifier came back with: 1 ,the real answer is : 1\n",
      "the classifier came back with: 1 ,the real answer is : 1\n",
      "the classifier came back with: 1 ,the real answer is : 1\n",
      "the classifier came back with: 1 ,the real answer is : 1\n",
      "the classifier came back with: 1 ,the real answer is : 1\n",
      "the classifier came back with: 1 ,the real answer is : 1\n",
      "the classifier came back with: 1 ,the real answer is : 1\n",
      "the classifier came back with: 1 ,the real answer is : 1\n",
      "the classifier came back with: 1 ,the real answer is : 1\n",
      "the classifier came back with: 1 ,the real answer is : 1\n",
      "the classifier came back with: 1 ,the real answer is : 1\n",
      "the classifier came back with: 1 ,the real answer is : 1\n",
      "the classifier came back with: 1 ,the real answer is : 1\n"
     ]
    },
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "the classifier came back with: 1 ,the real answer is : 1\n",
      "the classifier came back with: 1 ,the real answer is : 1\n",
      "the classifier came back with: 1 ,the real answer is : 1\n",
      "the classifier came back with: 1 ,the real answer is : 1\n",
      "the classifier came back with: 1 ,the real answer is : 1\n",
      "the classifier came back with: 1 ,the real answer is : 1\n",
      "the classifier came back with: 1 ,the real answer is : 1\n",
      "the classifier came back with: 1 ,the real answer is : 1\n",
      "the classifier came back with: 1 ,the real answer is : 1\n",
      "the classifier came back with: 1 ,the real answer is : 1\n",
      "the classifier came back with: 1 ,the real answer is : 1\n",
      "the classifier came back with: 1 ,the real answer is : 1\n",
      "the classifier came back with: 1 ,the real answer is : 1\n",
      "the classifier came back with: 1 ,the real answer is : 1\n",
      "the classifier came back with: 1 ,the real answer is : 1\n",
      "the classifier came back with: 1 ,the real answer is : 1\n",
      "the classifier came back with: 1 ,the real answer is : 1\n",
      "the classifier came back with: 1 ,the real answer is : 1\n",
      "the classifier came back with: 1 ,the real answer is : 1\n",
      "the classifier came back with: 1 ,the real answer is : 1\n",
      "the classifier came back with: 1 ,the real answer is : 1\n",
      "the classifier came back with: 1 ,the real answer is : 1\n",
      "the classifier came back with: 1 ,the real answer is : 1\n",
      "the classifier came back with: 7 ,the real answer is : 1\n",
      "the classifier came back with: 1 ,the real answer is : 1\n",
      "the classifier came back with: 1 ,the real answer is : 1\n",
      "the classifier came back with: 1 ,the real answer is : 1\n",
      "the classifier came back with: 1 ,the real answer is : 1\n",
      "the classifier came back with: 1 ,the real answer is : 1\n",
      "the classifier came back with: 1 ,the real answer is : 1\n",
      "the classifier came back with: 1 ,the real answer is : 1\n",
      "the classifier came back with: 1 ,the real answer is : 1\n",
      "the classifier came back with: 1 ,the real answer is : 1\n",
      "the classifier came back with: 1 ,the real answer is : 1\n",
      "the classifier came back with: 1 ,the real answer is : 1\n",
      "the classifier came back with: 2 ,the real answer is : 2\n",
      "the classifier came back with: 2 ,the real answer is : 2\n",
      "the classifier came back with: 2 ,the real answer is : 2\n",
      "the classifier came back with: 2 ,the real answer is : 2\n",
      "the classifier came back with: 2 ,the real answer is : 2\n",
      "the classifier came back with: 2 ,the real answer is : 2\n",
      "the classifier came back with: 2 ,the real answer is : 2\n",
      "the classifier came back with: 2 ,the real answer is : 2\n",
      "the classifier came back with: 2 ,the real answer is : 2\n",
      "the classifier came back with: 2 ,the real answer is : 2\n",
      "the classifier came back with: 2 ,the real answer is : 2\n",
      "the classifier came back with: 2 ,the real answer is : 2\n",
      "the classifier came back with: 2 ,the real answer is : 2\n",
      "the classifier came back with: 2 ,the real answer is : 2\n",
      "the classifier came back with: 2 ,the real answer is : 2\n",
      "the classifier came back with: 2 ,the real answer is : 2\n",
      "the classifier came back with: 2 ,the real answer is : 2\n",
      "the classifier came back with: 2 ,the real answer is : 2\n",
      "the classifier came back with: 2 ,the real answer is : 2\n",
      "the classifier came back with: 2 ,the real answer is : 2\n",
      "the classifier came back with: 2 ,the real answer is : 2\n",
      "the classifier came back with: 2 ,the real answer is : 2\n",
      "the classifier came back with: 2 ,the real answer is : 2\n",
      "the classifier came back with: 2 ,the real answer is : 2\n",
      "the classifier came back with: 2 ,the real answer is : 2\n",
      "the classifier came back with: 2 ,the real answer is : 2\n",
      "the classifier came back with: 2 ,the real answer is : 2\n",
      "the classifier came back with: 2 ,the real answer is : 2\n",
      "the classifier came back with: 2 ,the real answer is : 2\n",
      "the classifier came back with: 2 ,the real answer is : 2\n",
      "the classifier came back with: 2 ,the real answer is : 2\n",
      "the classifier came back with: 2 ,the real answer is : 2\n",
      "the classifier came back with: 2 ,the real answer is : 2\n",
      "the classifier came back with: 2 ,the real answer is : 2\n",
      "the classifier came back with: 2 ,the real answer is : 2\n",
      "the classifier came back with: 2 ,the real answer is : 2\n",
      "the classifier came back with: 2 ,the real answer is : 2\n",
      "the classifier came back with: 2 ,the real answer is : 2\n",
      "the classifier came back with: 2 ,the real answer is : 2\n",
      "the classifier came back with: 2 ,the real answer is : 2\n",
      "the classifier came back with: 2 ,the real answer is : 2\n",
      "the classifier came back with: 2 ,the real answer is : 2\n",
      "the classifier came back with: 2 ,the real answer is : 2\n",
      "the classifier came back with: 2 ,the real answer is : 2\n",
      "the classifier came back with: 2 ,the real answer is : 2\n",
      "the classifier came back with: 2 ,the real answer is : 2\n",
      "the classifier came back with: 2 ,the real answer is : 2\n",
      "the classifier came back with: 2 ,the real answer is : 2\n",
      "the classifier came back with: 2 ,the real answer is : 2\n",
      "the classifier came back with: 2 ,the real answer is : 2\n",
      "the classifier came back with: 2 ,the real answer is : 2\n",
      "the classifier came back with: 2 ,the real answer is : 2\n",
      "the classifier came back with: 2 ,the real answer is : 2\n",
      "the classifier came back with: 2 ,the real answer is : 2\n",
      "the classifier came back with: 2 ,the real answer is : 2\n",
      "the classifier came back with: 2 ,the real answer is : 2\n",
      "the classifier came back with: 2 ,the real answer is : 2\n",
      "the classifier came back with: 2 ,the real answer is : 2\n",
      "the classifier came back with: 2 ,the real answer is : 2\n",
      "the classifier came back with: 2 ,the real answer is : 2\n",
      "the classifier came back with: 2 ,the real answer is : 2\n",
      "the classifier came back with: 2 ,the real answer is : 2\n",
      "the classifier came back with: 2 ,the real answer is : 2\n",
      "the classifier came back with: 2 ,the real answer is : 2\n",
      "the classifier came back with: 2 ,the real answer is : 2\n",
      "the classifier came back with: 2 ,the real answer is : 2\n",
      "the classifier came back with: 2 ,the real answer is : 2\n",
      "the classifier came back with: 2 ,the real answer is : 2\n",
      "the classifier came back with: 2 ,the real answer is : 2\n",
      "the classifier came back with: 2 ,the real answer is : 2\n",
      "the classifier came back with: 2 ,the real answer is : 2\n",
      "the classifier came back with: 2 ,the real answer is : 2\n",
      "the classifier came back with: 2 ,the real answer is : 2\n",
      "the classifier came back with: 2 ,the real answer is : 2\n",
      "the classifier came back with: 2 ,the real answer is : 2\n",
      "the classifier came back with: 2 ,the real answer is : 2\n",
      "the classifier came back with: 2 ,the real answer is : 2\n",
      "the classifier came back with: 2 ,the real answer is : 2\n",
      "the classifier came back with: 2 ,the real answer is : 2\n",
      "the classifier came back with: 2 ,the real answer is : 2\n",
      "the classifier came back with: 2 ,the real answer is : 2\n",
      "the classifier came back with: 2 ,the real answer is : 2\n",
      "the classifier came back with: 2 ,the real answer is : 2\n",
      "the classifier came back with: 2 ,the real answer is : 2\n",
      "the classifier came back with: 2 ,the real answer is : 2\n",
      "the classifier came back with: 2 ,the real answer is : 2\n",
      "the classifier came back with: 2 ,the real answer is : 2\n",
      "the classifier came back with: 2 ,the real answer is : 2\n",
      "the classifier came back with: 2 ,the real answer is : 2\n",
      "the classifier came back with: 2 ,the real answer is : 2\n",
      "the classifier came back with: 2 ,the real answer is : 2\n",
      "the classifier came back with: 2 ,the real answer is : 2\n",
      "the classifier came back with: 3 ,the real answer is : 3\n",
      "the classifier came back with: 3 ,the real answer is : 3\n",
      "the classifier came back with: 3 ,the real answer is : 3\n",
      "the classifier came back with: 9 ,the real answer is : 3\n",
      "the classifier came back with: 3 ,the real answer is : 3\n",
      "the classifier came back with: 3 ,the real answer is : 3\n",
      "the classifier came back with: 3 ,the real answer is : 3\n",
      "the classifier came back with: 3 ,the real answer is : 3\n",
      "the classifier came back with: 3 ,the real answer is : 3\n",
      "the classifier came back with: 3 ,the real answer is : 3\n",
      "the classifier came back with: 3 ,the real answer is : 3\n",
      "the classifier came back with: 3 ,the real answer is : 3\n",
      "the classifier came back with: 3 ,the real answer is : 3\n",
      "the classifier came back with: 3 ,the real answer is : 3\n",
      "the classifier came back with: 3 ,the real answer is : 3\n",
      "the classifier came back with: 3 ,the real answer is : 3\n",
      "the classifier came back with: 3 ,the real answer is : 3\n",
      "the classifier came back with: 3 ,the real answer is : 3\n",
      "the classifier came back with: 3 ,the real answer is : 3\n"
     ]
    },
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "the classifier came back with: 3 ,the real answer is : 3\n",
      "the classifier came back with: 3 ,the real answer is : 3\n",
      "the classifier came back with: 3 ,the real answer is : 3\n",
      "the classifier came back with: 3 ,the real answer is : 3\n",
      "the classifier came back with: 3 ,the real answer is : 3\n",
      "the classifier came back with: 3 ,the real answer is : 3\n",
      "the classifier came back with: 3 ,the real answer is : 3\n",
      "the classifier came back with: 3 ,the real answer is : 3\n",
      "the classifier came back with: 3 ,the real answer is : 3\n",
      "the classifier came back with: 3 ,the real answer is : 3\n",
      "the classifier came back with: 3 ,the real answer is : 3\n",
      "the classifier came back with: 3 ,the real answer is : 3\n",
      "the classifier came back with: 3 ,the real answer is : 3\n",
      "the classifier came back with: 3 ,the real answer is : 3\n",
      "the classifier came back with: 3 ,the real answer is : 3\n",
      "the classifier came back with: 3 ,the real answer is : 3\n",
      "the classifier came back with: 3 ,the real answer is : 3\n",
      "the classifier came back with: 3 ,the real answer is : 3\n",
      "the classifier came back with: 3 ,the real answer is : 3\n",
      "the classifier came back with: 3 ,the real answer is : 3\n",
      "the classifier came back with: 3 ,the real answer is : 3\n",
      "the classifier came back with: 3 ,the real answer is : 3\n",
      "the classifier came back with: 3 ,the real answer is : 3\n",
      "the classifier came back with: 3 ,the real answer is : 3\n",
      "the classifier came back with: 3 ,the real answer is : 3\n",
      "the classifier came back with: 3 ,the real answer is : 3\n",
      "the classifier came back with: 3 ,the real answer is : 3\n",
      "the classifier came back with: 3 ,the real answer is : 3\n",
      "the classifier came back with: 3 ,the real answer is : 3\n",
      "the classifier came back with: 3 ,the real answer is : 3\n",
      "the classifier came back with: 3 ,the real answer is : 3\n",
      "the classifier came back with: 3 ,the real answer is : 3\n",
      "the classifier came back with: 3 ,the real answer is : 3\n",
      "the classifier came back with: 3 ,the real answer is : 3\n",
      "the classifier came back with: 3 ,the real answer is : 3\n",
      "the classifier came back with: 3 ,the real answer is : 3\n",
      "the classifier came back with: 3 ,the real answer is : 3\n",
      "the classifier came back with: 3 ,the real answer is : 3\n",
      "the classifier came back with: 3 ,the real answer is : 3\n",
      "the classifier came back with: 3 ,the real answer is : 3\n",
      "the classifier came back with: 3 ,the real answer is : 3\n",
      "the classifier came back with: 3 ,the real answer is : 3\n",
      "the classifier came back with: 3 ,the real answer is : 3\n",
      "the classifier came back with: 3 ,the real answer is : 3\n",
      "the classifier came back with: 3 ,the real answer is : 3\n",
      "the classifier came back with: 3 ,the real answer is : 3\n",
      "the classifier came back with: 3 ,the real answer is : 3\n",
      "the classifier came back with: 3 ,the real answer is : 3\n",
      "the classifier came back with: 3 ,the real answer is : 3\n",
      "the classifier came back with: 3 ,the real answer is : 3\n",
      "the classifier came back with: 3 ,the real answer is : 3\n",
      "the classifier came back with: 3 ,the real answer is : 3\n",
      "the classifier came back with: 3 ,the real answer is : 3\n",
      "the classifier came back with: 3 ,the real answer is : 3\n",
      "the classifier came back with: 3 ,the real answer is : 3\n",
      "the classifier came back with: 3 ,the real answer is : 3\n",
      "the classifier came back with: 3 ,the real answer is : 3\n",
      "the classifier came back with: 3 ,the real answer is : 3\n",
      "the classifier came back with: 3 ,the real answer is : 3\n",
      "the classifier came back with: 3 ,the real answer is : 3\n",
      "the classifier came back with: 3 ,the real answer is : 3\n",
      "the classifier came back with: 3 ,the real answer is : 3\n",
      "the classifier came back with: 3 ,the real answer is : 3\n",
      "the classifier came back with: 3 ,the real answer is : 3\n",
      "the classifier came back with: 3 ,the real answer is : 3\n",
      "the classifier came back with: 3 ,the real answer is : 3\n",
      "the classifier came back with: 4 ,the real answer is : 4\n",
      "the classifier came back with: 4 ,the real answer is : 4\n",
      "the classifier came back with: 4 ,the real answer is : 4\n",
      "the classifier came back with: 4 ,the real answer is : 4\n",
      "the classifier came back with: 4 ,the real answer is : 4\n",
      "the classifier came back with: 4 ,the real answer is : 4\n",
      "the classifier came back with: 4 ,the real answer is : 4\n",
      "the classifier came back with: 4 ,the real answer is : 4\n",
      "the classifier came back with: 4 ,the real answer is : 4\n",
      "the classifier came back with: 4 ,the real answer is : 4\n",
      "the classifier came back with: 4 ,the real answer is : 4\n",
      "the classifier came back with: 4 ,the real answer is : 4\n",
      "the classifier came back with: 4 ,the real answer is : 4\n",
      "the classifier came back with: 4 ,the real answer is : 4\n",
      "the classifier came back with: 4 ,the real answer is : 4\n",
      "the classifier came back with: 4 ,the real answer is : 4\n",
      "the classifier came back with: 4 ,the real answer is : 4\n",
      "the classifier came back with: 4 ,the real answer is : 4\n",
      "the classifier came back with: 4 ,the real answer is : 4\n",
      "the classifier came back with: 4 ,the real answer is : 4\n",
      "the classifier came back with: 4 ,the real answer is : 4\n",
      "the classifier came back with: 4 ,the real answer is : 4\n",
      "the classifier came back with: 4 ,the real answer is : 4\n",
      "the classifier came back with: 4 ,the real answer is : 4\n",
      "the classifier came back with: 4 ,the real answer is : 4\n",
      "the classifier came back with: 4 ,the real answer is : 4\n",
      "the classifier came back with: 4 ,the real answer is : 4\n",
      "the classifier came back with: 4 ,the real answer is : 4\n",
      "the classifier came back with: 4 ,the real answer is : 4\n",
      "the classifier came back with: 4 ,the real answer is : 4\n",
      "the classifier came back with: 4 ,the real answer is : 4\n",
      "the classifier came back with: 4 ,the real answer is : 4\n",
      "the classifier came back with: 4 ,the real answer is : 4\n",
      "the classifier came back with: 4 ,the real answer is : 4\n",
      "the classifier came back with: 4 ,the real answer is : 4\n",
      "the classifier came back with: 4 ,the real answer is : 4\n",
      "the classifier came back with: 4 ,the real answer is : 4\n",
      "the classifier came back with: 4 ,the real answer is : 4\n",
      "the classifier came back with: 4 ,the real answer is : 4\n",
      "the classifier came back with: 4 ,the real answer is : 4\n",
      "the classifier came back with: 4 ,the real answer is : 4\n",
      "the classifier came back with: 4 ,the real answer is : 4\n",
      "the classifier came back with: 4 ,the real answer is : 4\n",
      "the classifier came back with: 4 ,the real answer is : 4\n",
      "the classifier came back with: 4 ,the real answer is : 4\n",
      "the classifier came back with: 4 ,the real answer is : 4\n",
      "the classifier came back with: 4 ,the real answer is : 4\n",
      "the classifier came back with: 4 ,the real answer is : 4\n",
      "the classifier came back with: 4 ,the real answer is : 4\n",
      "the classifier came back with: 4 ,the real answer is : 4\n",
      "the classifier came back with: 4 ,the real answer is : 4\n",
      "the classifier came back with: 4 ,the real answer is : 4\n",
      "the classifier came back with: 4 ,the real answer is : 4\n",
      "the classifier came back with: 4 ,the real answer is : 4\n",
      "the classifier came back with: 4 ,the real answer is : 4\n",
      "the classifier came back with: 4 ,the real answer is : 4\n",
      "the classifier came back with: 4 ,the real answer is : 4\n",
      "the classifier came back with: 4 ,the real answer is : 4\n",
      "the classifier came back with: 4 ,the real answer is : 4\n",
      "the classifier came back with: 4 ,the real answer is : 4\n",
      "the classifier came back with: 4 ,the real answer is : 4\n",
      "the classifier came back with: 4 ,the real answer is : 4\n",
      "the classifier came back with: 4 ,the real answer is : 4\n",
      "the classifier came back with: 4 ,the real answer is : 4\n",
      "the classifier came back with: 4 ,the real answer is : 4\n",
      "the classifier came back with: 4 ,the real answer is : 4\n",
      "the classifier came back with: 4 ,the real answer is : 4\n",
      "the classifier came back with: 4 ,the real answer is : 4\n",
      "the classifier came back with: 4 ,the real answer is : 4\n",
      "the classifier came back with: 4 ,the real answer is : 4\n",
      "the classifier came back with: 4 ,the real answer is : 4\n",
      "the classifier came back with: 4 ,the real answer is : 4\n",
      "the classifier came back with: 4 ,the real answer is : 4\n",
      "the classifier came back with: 4 ,the real answer is : 4\n",
      "the classifier came back with: 4 ,the real answer is : 4\n",
      "the classifier came back with: 4 ,the real answer is : 4\n",
      "the classifier came back with: 4 ,the real answer is : 4\n",
      "the classifier came back with: 4 ,the real answer is : 4\n",
      "the classifier came back with: 4 ,the real answer is : 4\n",
      "the classifier came back with: 4 ,the real answer is : 4\n",
      "the classifier came back with: 4 ,the real answer is : 4\n",
      "the classifier came back with: 4 ,the real answer is : 4\n",
      "the classifier came back with: 4 ,the real answer is : 4\n",
      "the classifier came back with: 4 ,the real answer is : 4\n"
     ]
    },
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "the classifier came back with: 4 ,the real answer is : 4\n",
      "the classifier came back with: 4 ,the real answer is : 4\n",
      "the classifier came back with: 4 ,the real answer is : 4\n",
      "the classifier came back with: 4 ,the real answer is : 4\n",
      "the classifier came back with: 4 ,the real answer is : 4\n",
      "the classifier came back with: 4 ,the real answer is : 4\n",
      "the classifier came back with: 4 ,the real answer is : 4\n",
      "the classifier came back with: 4 ,the real answer is : 4\n",
      "the classifier came back with: 4 ,the real answer is : 4\n",
      "the classifier came back with: 4 ,the real answer is : 4\n",
      "the classifier came back with: 4 ,the real answer is : 4\n",
      "the classifier came back with: 4 ,the real answer is : 4\n",
      "the classifier came back with: 4 ,the real answer is : 4\n",
      "the classifier came back with: 4 ,the real answer is : 4\n",
      "the classifier came back with: 4 ,the real answer is : 4\n",
      "the classifier came back with: 4 ,the real answer is : 4\n",
      "the classifier came back with: 4 ,the real answer is : 4\n",
      "the classifier came back with: 4 ,the real answer is : 4\n",
      "the classifier came back with: 4 ,the real answer is : 4\n",
      "the classifier came back with: 4 ,the real answer is : 4\n",
      "the classifier came back with: 4 ,the real answer is : 4\n",
      "the classifier came back with: 4 ,the real answer is : 4\n",
      "the classifier came back with: 4 ,the real answer is : 4\n",
      "the classifier came back with: 4 ,the real answer is : 4\n",
      "the classifier came back with: 4 ,the real answer is : 4\n",
      "the classifier came back with: 4 ,the real answer is : 4\n",
      "the classifier came back with: 4 ,the real answer is : 4\n",
      "the classifier came back with: 4 ,the real answer is : 4\n",
      "the classifier came back with: 4 ,the real answer is : 4\n",
      "the classifier came back with: 4 ,the real answer is : 4\n",
      "the classifier came back with: 5 ,the real answer is : 5\n",
      "the classifier came back with: 5 ,the real answer is : 5\n",
      "the classifier came back with: 5 ,the real answer is : 5\n",
      "the classifier came back with: 5 ,the real answer is : 5\n",
      "the classifier came back with: 5 ,the real answer is : 5\n",
      "the classifier came back with: 5 ,the real answer is : 5\n",
      "the classifier came back with: 5 ,the real answer is : 5\n",
      "the classifier came back with: 5 ,the real answer is : 5\n",
      "the classifier came back with: 5 ,the real answer is : 5\n",
      "the classifier came back with: 5 ,the real answer is : 5\n",
      "the classifier came back with: 5 ,the real answer is : 5\n",
      "the classifier came back with: 5 ,the real answer is : 5\n",
      "the classifier came back with: 5 ,the real answer is : 5\n",
      "the classifier came back with: 5 ,the real answer is : 5\n",
      "the classifier came back with: 5 ,the real answer is : 5\n",
      "the classifier came back with: 5 ,the real answer is : 5\n",
      "the classifier came back with: 5 ,the real answer is : 5\n",
      "the classifier came back with: 5 ,the real answer is : 5\n",
      "the classifier came back with: 5 ,the real answer is : 5\n",
      "the classifier came back with: 5 ,the real answer is : 5\n",
      "the classifier came back with: 5 ,the real answer is : 5\n",
      "the classifier came back with: 5 ,the real answer is : 5\n",
      "the classifier came back with: 5 ,the real answer is : 5\n",
      "the classifier came back with: 5 ,the real answer is : 5\n",
      "the classifier came back with: 5 ,the real answer is : 5\n",
      "the classifier came back with: 5 ,the real answer is : 5\n",
      "the classifier came back with: 5 ,the real answer is : 5\n",
      "the classifier came back with: 5 ,the real answer is : 5\n",
      "the classifier came back with: 5 ,the real answer is : 5\n",
      "the classifier came back with: 5 ,the real answer is : 5\n",
      "the classifier came back with: 5 ,the real answer is : 5\n",
      "the classifier came back with: 5 ,the real answer is : 5\n",
      "the classifier came back with: 5 ,the real answer is : 5\n",
      "the classifier came back with: 5 ,the real answer is : 5\n",
      "the classifier came back with: 5 ,the real answer is : 5\n",
      "the classifier came back with: 5 ,the real answer is : 5\n",
      "the classifier came back with: 5 ,the real answer is : 5\n",
      "the classifier came back with: 5 ,the real answer is : 5\n",
      "the classifier came back with: 5 ,the real answer is : 5\n",
      "the classifier came back with: 5 ,the real answer is : 5\n",
      "the classifier came back with: 5 ,the real answer is : 5\n",
      "the classifier came back with: 5 ,the real answer is : 5\n",
      "the classifier came back with: 5 ,the real answer is : 5\n",
      "the classifier came back with: 5 ,the real answer is : 5\n",
      "the classifier came back with: 5 ,the real answer is : 5\n",
      "the classifier came back with: 3 ,the real answer is : 5\n",
      "the classifier came back with: 6 ,the real answer is : 5\n",
      "the classifier came back with: 5 ,the real answer is : 5\n",
      "the classifier came back with: 5 ,the real answer is : 5\n",
      "the classifier came back with: 5 ,the real answer is : 5\n",
      "the classifier came back with: 5 ,the real answer is : 5\n",
      "the classifier came back with: 5 ,the real answer is : 5\n",
      "the classifier came back with: 5 ,the real answer is : 5\n",
      "the classifier came back with: 5 ,the real answer is : 5\n",
      "the classifier came back with: 5 ,the real answer is : 5\n",
      "the classifier came back with: 5 ,the real answer is : 5\n",
      "the classifier came back with: 5 ,the real answer is : 5\n",
      "the classifier came back with: 5 ,the real answer is : 5\n",
      "the classifier came back with: 5 ,the real answer is : 5\n",
      "the classifier came back with: 5 ,the real answer is : 5\n",
      "the classifier came back with: 5 ,the real answer is : 5\n",
      "the classifier came back with: 5 ,the real answer is : 5\n",
      "the classifier came back with: 5 ,the real answer is : 5\n",
      "the classifier came back with: 5 ,the real answer is : 5\n",
      "the classifier came back with: 5 ,the real answer is : 5\n",
      "the classifier came back with: 5 ,the real answer is : 5\n",
      "the classifier came back with: 5 ,the real answer is : 5\n",
      "the classifier came back with: 5 ,the real answer is : 5\n",
      "the classifier came back with: 5 ,the real answer is : 5\n",
      "the classifier came back with: 5 ,the real answer is : 5\n",
      "the classifier came back with: 5 ,the real answer is : 5\n",
      "the classifier came back with: 5 ,the real answer is : 5\n",
      "the classifier came back with: 5 ,the real answer is : 5\n",
      "the classifier came back with: 5 ,the real answer is : 5\n",
      "the classifier came back with: 5 ,the real answer is : 5\n",
      "the classifier came back with: 5 ,the real answer is : 5\n",
      "the classifier came back with: 5 ,the real answer is : 5\n",
      "the classifier came back with: 5 ,the real answer is : 5\n",
      "the classifier came back with: 5 ,the real answer is : 5\n",
      "the classifier came back with: 5 ,the real answer is : 5\n",
      "the classifier came back with: 5 ,the real answer is : 5\n",
      "the classifier came back with: 5 ,the real answer is : 5\n",
      "the classifier came back with: 5 ,the real answer is : 5\n",
      "the classifier came back with: 5 ,the real answer is : 5\n",
      "the classifier came back with: 5 ,the real answer is : 5\n",
      "the classifier came back with: 5 ,the real answer is : 5\n",
      "the classifier came back with: 5 ,the real answer is : 5\n",
      "the classifier came back with: 5 ,the real answer is : 5\n",
      "the classifier came back with: 5 ,the real answer is : 5\n",
      "the classifier came back with: 5 ,the real answer is : 5\n",
      "the classifier came back with: 5 ,the real answer is : 5\n",
      "the classifier came back with: 5 ,the real answer is : 5\n",
      "the classifier came back with: 5 ,the real answer is : 5\n",
      "the classifier came back with: 5 ,the real answer is : 5\n",
      "the classifier came back with: 5 ,the real answer is : 5\n",
      "the classifier came back with: 5 ,the real answer is : 5\n",
      "the classifier came back with: 5 ,the real answer is : 5\n",
      "the classifier came back with: 5 ,the real answer is : 5\n",
      "the classifier came back with: 5 ,the real answer is : 5\n",
      "the classifier came back with: 5 ,the real answer is : 5\n",
      "the classifier came back with: 5 ,the real answer is : 5\n",
      "the classifier came back with: 5 ,the real answer is : 5\n",
      "the classifier came back with: 5 ,the real answer is : 5\n",
      "the classifier came back with: 5 ,the real answer is : 5\n",
      "the classifier came back with: 5 ,the real answer is : 5\n",
      "the classifier came back with: 5 ,the real answer is : 5\n",
      "the classifier came back with: 5 ,the real answer is : 5\n",
      "the classifier came back with: 5 ,the real answer is : 5\n",
      "the classifier came back with: 6 ,the real answer is : 6\n",
      "the classifier came back with: 6 ,the real answer is : 6\n",
      "the classifier came back with: 6 ,the real answer is : 6\n",
      "the classifier came back with: 6 ,the real answer is : 6\n",
      "the classifier came back with: 6 ,the real answer is : 6\n",
      "the classifier came back with: 6 ,the real answer is : 6\n",
      "the classifier came back with: 6 ,the real answer is : 6\n",
      "the classifier came back with: 6 ,the real answer is : 6\n",
      "the classifier came back with: 6 ,the real answer is : 6\n",
      "the classifier came back with: 6 ,the real answer is : 6\n",
      "the classifier came back with: 6 ,the real answer is : 6\n"
     ]
    },
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "the classifier came back with: 6 ,the real answer is : 6\n",
      "the classifier came back with: 6 ,the real answer is : 6\n",
      "the classifier came back with: 6 ,the real answer is : 6\n",
      "the classifier came back with: 6 ,the real answer is : 6\n",
      "the classifier came back with: 6 ,the real answer is : 6\n",
      "the classifier came back with: 6 ,the real answer is : 6\n",
      "the classifier came back with: 6 ,the real answer is : 6\n",
      "the classifier came back with: 6 ,the real answer is : 6\n",
      "the classifier came back with: 6 ,the real answer is : 6\n",
      "the classifier came back with: 6 ,the real answer is : 6\n",
      "the classifier came back with: 6 ,the real answer is : 6\n",
      "the classifier came back with: 6 ,the real answer is : 6\n",
      "the classifier came back with: 6 ,the real answer is : 6\n",
      "the classifier came back with: 6 ,the real answer is : 6\n",
      "the classifier came back with: 6 ,the real answer is : 6\n",
      "the classifier came back with: 6 ,the real answer is : 6\n",
      "the classifier came back with: 6 ,the real answer is : 6\n",
      "the classifier came back with: 6 ,the real answer is : 6\n",
      "the classifier came back with: 6 ,the real answer is : 6\n",
      "the classifier came back with: 6 ,the real answer is : 6\n",
      "the classifier came back with: 6 ,the real answer is : 6\n",
      "the classifier came back with: 6 ,the real answer is : 6\n",
      "the classifier came back with: 6 ,the real answer is : 6\n",
      "the classifier came back with: 6 ,the real answer is : 6\n",
      "the classifier came back with: 6 ,the real answer is : 6\n",
      "the classifier came back with: 6 ,the real answer is : 6\n",
      "the classifier came back with: 6 ,the real answer is : 6\n",
      "the classifier came back with: 6 ,the real answer is : 6\n",
      "the classifier came back with: 6 ,the real answer is : 6\n",
      "the classifier came back with: 6 ,the real answer is : 6\n",
      "the classifier came back with: 6 ,the real answer is : 6\n",
      "the classifier came back with: 6 ,the real answer is : 6\n",
      "the classifier came back with: 6 ,the real answer is : 6\n",
      "the classifier came back with: 6 ,the real answer is : 6\n",
      "the classifier came back with: 6 ,the real answer is : 6\n",
      "the classifier came back with: 6 ,the real answer is : 6\n",
      "the classifier came back with: 6 ,the real answer is : 6\n",
      "the classifier came back with: 6 ,the real answer is : 6\n",
      "the classifier came back with: 6 ,the real answer is : 6\n",
      "the classifier came back with: 6 ,the real answer is : 6\n",
      "the classifier came back with: 6 ,the real answer is : 6\n",
      "the classifier came back with: 6 ,the real answer is : 6\n",
      "the classifier came back with: 6 ,the real answer is : 6\n",
      "the classifier came back with: 6 ,the real answer is : 6\n",
      "the classifier came back with: 6 ,the real answer is : 6\n",
      "the classifier came back with: 6 ,the real answer is : 6\n",
      "the classifier came back with: 6 ,the real answer is : 6\n",
      "the classifier came back with: 6 ,the real answer is : 6\n",
      "the classifier came back with: 6 ,the real answer is : 6\n",
      "the classifier came back with: 6 ,the real answer is : 6\n",
      "the classifier came back with: 6 ,the real answer is : 6\n",
      "the classifier came back with: 6 ,the real answer is : 6\n",
      "the classifier came back with: 6 ,the real answer is : 6\n",
      "the classifier came back with: 6 ,the real answer is : 6\n",
      "the classifier came back with: 6 ,the real answer is : 6\n",
      "the classifier came back with: 6 ,the real answer is : 6\n",
      "the classifier came back with: 6 ,the real answer is : 6\n",
      "the classifier came back with: 6 ,the real answer is : 6\n",
      "the classifier came back with: 6 ,the real answer is : 6\n",
      "the classifier came back with: 6 ,the real answer is : 6\n",
      "the classifier came back with: 6 ,the real answer is : 6\n",
      "the classifier came back with: 6 ,the real answer is : 6\n",
      "the classifier came back with: 6 ,the real answer is : 6\n",
      "the classifier came back with: 6 ,the real answer is : 6\n",
      "the classifier came back with: 6 ,the real answer is : 6\n",
      "the classifier came back with: 6 ,the real answer is : 6\n",
      "the classifier came back with: 6 ,the real answer is : 6\n",
      "the classifier came back with: 6 ,the real answer is : 6\n",
      "the classifier came back with: 6 ,the real answer is : 6\n",
      "the classifier came back with: 6 ,the real answer is : 6\n",
      "the classifier came back with: 6 ,the real answer is : 6\n",
      "the classifier came back with: 6 ,the real answer is : 6\n",
      "the classifier came back with: 6 ,the real answer is : 6\n",
      "the classifier came back with: 6 ,the real answer is : 6\n",
      "the classifier came back with: 6 ,the real answer is : 6\n",
      "the classifier came back with: 6 ,the real answer is : 6\n",
      "the classifier came back with: 7 ,the real answer is : 7\n",
      "the classifier came back with: 7 ,the real answer is : 7\n",
      "the classifier came back with: 7 ,the real answer is : 7\n",
      "the classifier came back with: 7 ,the real answer is : 7\n",
      "the classifier came back with: 7 ,the real answer is : 7\n",
      "the classifier came back with: 7 ,the real answer is : 7\n",
      "the classifier came back with: 7 ,the real answer is : 7\n",
      "the classifier came back with: 7 ,the real answer is : 7\n",
      "the classifier came back with: 7 ,the real answer is : 7\n",
      "the classifier came back with: 7 ,the real answer is : 7\n",
      "the classifier came back with: 7 ,the real answer is : 7\n",
      "the classifier came back with: 7 ,the real answer is : 7\n",
      "the classifier came back with: 7 ,the real answer is : 7\n",
      "the classifier came back with: 7 ,the real answer is : 7\n",
      "the classifier came back with: 7 ,the real answer is : 7\n",
      "the classifier came back with: 7 ,the real answer is : 7\n",
      "the classifier came back with: 7 ,the real answer is : 7\n",
      "the classifier came back with: 7 ,the real answer is : 7\n",
      "the classifier came back with: 7 ,the real answer is : 7\n",
      "the classifier came back with: 7 ,the real answer is : 7\n",
      "the classifier came back with: 7 ,the real answer is : 7\n",
      "the classifier came back with: 7 ,the real answer is : 7\n",
      "the classifier came back with: 7 ,the real answer is : 7\n",
      "the classifier came back with: 7 ,the real answer is : 7\n",
      "the classifier came back with: 7 ,the real answer is : 7\n",
      "the classifier came back with: 7 ,the real answer is : 7\n",
      "the classifier came back with: 7 ,the real answer is : 7\n",
      "the classifier came back with: 7 ,the real answer is : 7\n",
      "the classifier came back with: 7 ,the real answer is : 7\n",
      "the classifier came back with: 7 ,the real answer is : 7\n",
      "the classifier came back with: 7 ,the real answer is : 7\n",
      "the classifier came back with: 7 ,the real answer is : 7\n",
      "the classifier came back with: 7 ,the real answer is : 7\n",
      "the classifier came back with: 7 ,the real answer is : 7\n",
      "the classifier came back with: 7 ,the real answer is : 7\n",
      "the classifier came back with: 7 ,the real answer is : 7\n",
      "the classifier came back with: 7 ,the real answer is : 7\n",
      "the classifier came back with: 7 ,the real answer is : 7\n",
      "the classifier came back with: 7 ,the real answer is : 7\n",
      "the classifier came back with: 7 ,the real answer is : 7\n",
      "the classifier came back with: 7 ,the real answer is : 7\n",
      "the classifier came back with: 7 ,the real answer is : 7\n",
      "the classifier came back with: 7 ,the real answer is : 7\n",
      "the classifier came back with: 7 ,the real answer is : 7\n",
      "the classifier came back with: 7 ,the real answer is : 7\n",
      "the classifier came back with: 7 ,the real answer is : 7\n",
      "the classifier came back with: 7 ,the real answer is : 7\n",
      "the classifier came back with: 7 ,the real answer is : 7\n",
      "the classifier came back with: 7 ,the real answer is : 7\n",
      "the classifier came back with: 7 ,the real answer is : 7\n",
      "the classifier came back with: 7 ,the real answer is : 7\n",
      "the classifier came back with: 7 ,the real answer is : 7\n",
      "the classifier came back with: 7 ,the real answer is : 7\n",
      "the classifier came back with: 7 ,the real answer is : 7\n",
      "the classifier came back with: 7 ,the real answer is : 7\n",
      "the classifier came back with: 7 ,the real answer is : 7\n",
      "the classifier came back with: 7 ,the real answer is : 7\n",
      "the classifier came back with: 7 ,the real answer is : 7\n",
      "the classifier came back with: 7 ,the real answer is : 7\n",
      "the classifier came back with: 7 ,the real answer is : 7\n",
      "the classifier came back with: 7 ,the real answer is : 7\n",
      "the classifier came back with: 7 ,the real answer is : 7\n",
      "the classifier came back with: 7 ,the real answer is : 7\n",
      "the classifier came back with: 7 ,the real answer is : 7\n",
      "the classifier came back with: 7 ,the real answer is : 7\n",
      "the classifier came back with: 7 ,the real answer is : 7\n",
      "the classifier came back with: 7 ,the real answer is : 7\n",
      "the classifier came back with: 7 ,the real answer is : 7\n",
      "the classifier came back with: 7 ,the real answer is : 7\n",
      "the classifier came back with: 7 ,the real answer is : 7\n",
      "the classifier came back with: 7 ,the real answer is : 7\n",
      "the classifier came back with: 7 ,the real answer is : 7\n",
      "the classifier came back with: 7 ,the real answer is : 7\n",
      "the classifier came back with: 7 ,the real answer is : 7\n",
      "the classifier came back with: 7 ,the real answer is : 7\n"
     ]
    },
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "the classifier came back with: 7 ,the real answer is : 7\n",
      "the classifier came back with: 7 ,the real answer is : 7\n",
      "the classifier came back with: 7 ,the real answer is : 7\n",
      "the classifier came back with: 7 ,the real answer is : 7\n",
      "the classifier came back with: 7 ,the real answer is : 7\n",
      "the classifier came back with: 7 ,the real answer is : 7\n",
      "the classifier came back with: 7 ,the real answer is : 7\n",
      "the classifier came back with: 7 ,the real answer is : 7\n",
      "the classifier came back with: 7 ,the real answer is : 7\n",
      "the classifier came back with: 7 ,the real answer is : 7\n",
      "the classifier came back with: 7 ,the real answer is : 7\n",
      "the classifier came back with: 7 ,the real answer is : 7\n",
      "the classifier came back with: 7 ,the real answer is : 7\n",
      "the classifier came back with: 7 ,the real answer is : 7\n",
      "the classifier came back with: 7 ,the real answer is : 7\n",
      "the classifier came back with: 7 ,the real answer is : 7\n",
      "the classifier came back with: 7 ,the real answer is : 7\n",
      "the classifier came back with: 7 ,the real answer is : 7\n",
      "the classifier came back with: 7 ,the real answer is : 7\n",
      "the classifier came back with: 7 ,the real answer is : 7\n",
      "the classifier came back with: 7 ,the real answer is : 7\n",
      "the classifier came back with: 8 ,the real answer is : 8\n",
      "the classifier came back with: 8 ,the real answer is : 8\n",
      "the classifier came back with: 8 ,the real answer is : 8\n",
      "the classifier came back with: 6 ,the real answer is : 8\n",
      "the classifier came back with: 8 ,the real answer is : 8\n",
      "the classifier came back with: 8 ,the real answer is : 8\n",
      "the classifier came back with: 8 ,the real answer is : 8\n",
      "the classifier came back with: 8 ,the real answer is : 8\n",
      "the classifier came back with: 8 ,the real answer is : 8\n",
      "the classifier came back with: 8 ,the real answer is : 8\n",
      "the classifier came back with: 8 ,the real answer is : 8\n",
      "the classifier came back with: 8 ,the real answer is : 8\n",
      "the classifier came back with: 8 ,the real answer is : 8\n",
      "the classifier came back with: 8 ,the real answer is : 8\n",
      "the classifier came back with: 8 ,the real answer is : 8\n",
      "the classifier came back with: 8 ,the real answer is : 8\n",
      "the classifier came back with: 3 ,the real answer is : 8\n",
      "the classifier came back with: 8 ,the real answer is : 8\n",
      "the classifier came back with: 8 ,the real answer is : 8\n",
      "the classifier came back with: 8 ,the real answer is : 8\n",
      "the classifier came back with: 8 ,the real answer is : 8\n",
      "the classifier came back with: 8 ,the real answer is : 8\n",
      "the classifier came back with: 8 ,the real answer is : 8\n",
      "the classifier came back with: 8 ,the real answer is : 8\n",
      "the classifier came back with: 8 ,the real answer is : 8\n",
      "the classifier came back with: 8 ,the real answer is : 8\n",
      "the classifier came back with: 8 ,the real answer is : 8\n",
      "the classifier came back with: 8 ,the real answer is : 8\n",
      "the classifier came back with: 8 ,the real answer is : 8\n",
      "the classifier came back with: 8 ,the real answer is : 8\n",
      "the classifier came back with: 1 ,the real answer is : 8\n",
      "the classifier came back with: 8 ,the real answer is : 8\n",
      "the classifier came back with: 8 ,the real answer is : 8\n",
      "the classifier came back with: 8 ,the real answer is : 8\n",
      "the classifier came back with: 8 ,the real answer is : 8\n",
      "the classifier came back with: 8 ,the real answer is : 8\n",
      "the classifier came back with: 8 ,the real answer is : 8\n",
      "the classifier came back with: 8 ,the real answer is : 8\n",
      "the classifier came back with: 8 ,the real answer is : 8\n",
      "the classifier came back with: 8 ,the real answer is : 8\n",
      "the classifier came back with: 1 ,the real answer is : 8\n",
      "the classifier came back with: 8 ,the real answer is : 8\n",
      "the classifier came back with: 8 ,the real answer is : 8\n",
      "the classifier came back with: 8 ,the real answer is : 8\n",
      "the classifier came back with: 8 ,the real answer is : 8\n",
      "the classifier came back with: 8 ,the real answer is : 8\n",
      "the classifier came back with: 8 ,the real answer is : 8\n",
      "the classifier came back with: 8 ,the real answer is : 8\n",
      "the classifier came back with: 8 ,the real answer is : 8\n",
      "the classifier came back with: 8 ,the real answer is : 8\n",
      "the classifier came back with: 8 ,the real answer is : 8\n",
      "the classifier came back with: 8 ,the real answer is : 8\n",
      "the classifier came back with: 8 ,the real answer is : 8\n",
      "the classifier came back with: 8 ,the real answer is : 8\n",
      "the classifier came back with: 8 ,the real answer is : 8\n",
      "the classifier came back with: 8 ,the real answer is : 8\n",
      "the classifier came back with: 8 ,the real answer is : 8\n",
      "the classifier came back with: 8 ,the real answer is : 8\n",
      "the classifier came back with: 8 ,the real answer is : 8\n",
      "the classifier came back with: 8 ,the real answer is : 8\n",
      "the classifier came back with: 8 ,the real answer is : 8\n",
      "the classifier came back with: 8 ,the real answer is : 8\n",
      "the classifier came back with: 8 ,the real answer is : 8\n",
      "the classifier came back with: 8 ,the real answer is : 8\n",
      "the classifier came back with: 8 ,the real answer is : 8\n",
      "the classifier came back with: 8 ,the real answer is : 8\n",
      "the classifier came back with: 8 ,the real answer is : 8\n",
      "the classifier came back with: 8 ,the real answer is : 8\n",
      "the classifier came back with: 8 ,the real answer is : 8\n",
      "the classifier came back with: 8 ,the real answer is : 8\n",
      "the classifier came back with: 8 ,the real answer is : 8\n",
      "the classifier came back with: 8 ,the real answer is : 8\n",
      "the classifier came back with: 8 ,the real answer is : 8\n",
      "the classifier came back with: 8 ,the real answer is : 8\n",
      "the classifier came back with: 8 ,the real answer is : 8\n",
      "the classifier came back with: 8 ,the real answer is : 8\n",
      "the classifier came back with: 8 ,the real answer is : 8\n",
      "the classifier came back with: 8 ,the real answer is : 8\n",
      "the classifier came back with: 8 ,the real answer is : 8\n",
      "the classifier came back with: 8 ,the real answer is : 8\n",
      "the classifier came back with: 8 ,the real answer is : 8\n",
      "the classifier came back with: 8 ,the real answer is : 8\n",
      "the classifier came back with: 8 ,the real answer is : 8\n",
      "the classifier came back with: 8 ,the real answer is : 8\n",
      "the classifier came back with: 8 ,the real answer is : 8\n",
      "the classifier came back with: 8 ,the real answer is : 8\n",
      "the classifier came back with: 8 ,the real answer is : 8\n",
      "the classifier came back with: 8 ,the real answer is : 8\n",
      "the classifier came back with: 8 ,the real answer is : 8\n",
      "the classifier came back with: 8 ,the real answer is : 8\n",
      "the classifier came back with: 8 ,the real answer is : 8\n",
      "the classifier came back with: 9 ,the real answer is : 9\n",
      "the classifier came back with: 9 ,the real answer is : 9\n",
      "the classifier came back with: 9 ,the real answer is : 9\n",
      "the classifier came back with: 9 ,the real answer is : 9\n",
      "the classifier came back with: 9 ,the real answer is : 9\n",
      "the classifier came back with: 9 ,the real answer is : 9\n",
      "the classifier came back with: 1 ,the real answer is : 9\n",
      "the classifier came back with: 9 ,the real answer is : 9\n",
      "the classifier came back with: 9 ,the real answer is : 9\n",
      "the classifier came back with: 9 ,the real answer is : 9\n",
      "the classifier came back with: 9 ,the real answer is : 9\n",
      "the classifier came back with: 9 ,the real answer is : 9\n",
      "the classifier came back with: 9 ,the real answer is : 9\n",
      "the classifier came back with: 9 ,the real answer is : 9\n",
      "the classifier came back with: 9 ,the real answer is : 9\n",
      "the classifier came back with: 9 ,the real answer is : 9\n",
      "the classifier came back with: 9 ,the real answer is : 9\n",
      "the classifier came back with: 9 ,the real answer is : 9\n",
      "the classifier came back with: 9 ,the real answer is : 9\n",
      "the classifier came back with: 9 ,the real answer is : 9\n",
      "the classifier came back with: 9 ,the real answer is : 9\n",
      "the classifier came back with: 9 ,the real answer is : 9\n",
      "the classifier came back with: 9 ,the real answer is : 9\n",
      "the classifier came back with: 9 ,the real answer is : 9\n",
      "the classifier came back with: 9 ,the real answer is : 9\n",
      "the classifier came back with: 9 ,the real answer is : 9\n",
      "the classifier came back with: 9 ,the real answer is : 9\n",
      "the classifier came back with: 9 ,the real answer is : 9\n",
      "the classifier came back with: 9 ,the real answer is : 9\n",
      "the classifier came back with: 9 ,the real answer is : 9\n",
      "the classifier came back with: 9 ,the real answer is : 9\n",
      "the classifier came back with: 9 ,the real answer is : 9\n"
     ]
    },
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "the classifier came back with: 9 ,the real answer is : 9\n",
      "the classifier came back with: 9 ,the real answer is : 9\n",
      "the classifier came back with: 9 ,the real answer is : 9\n",
      "the classifier came back with: 9 ,the real answer is : 9\n",
      "the classifier came back with: 9 ,the real answer is : 9\n",
      "the classifier came back with: 9 ,the real answer is : 9\n",
      "the classifier came back with: 9 ,the real answer is : 9\n",
      "the classifier came back with: 9 ,the real answer is : 9\n",
      "the classifier came back with: 9 ,the real answer is : 9\n",
      "the classifier came back with: 9 ,the real answer is : 9\n",
      "the classifier came back with: 9 ,the real answer is : 9\n",
      "the classifier came back with: 9 ,the real answer is : 9\n",
      "the classifier came back with: 9 ,the real answer is : 9\n",
      "the classifier came back with: 9 ,the real answer is : 9\n",
      "the classifier came back with: 9 ,the real answer is : 9\n",
      "the classifier came back with: 9 ,the real answer is : 9\n",
      "the classifier came back with: 9 ,the real answer is : 9\n",
      "the classifier came back with: 9 ,the real answer is : 9\n",
      "the classifier came back with: 9 ,the real answer is : 9\n",
      "the classifier came back with: 9 ,the real answer is : 9\n",
      "the classifier came back with: 9 ,the real answer is : 9\n",
      "the classifier came back with: 9 ,the real answer is : 9\n",
      "the classifier came back with: 9 ,the real answer is : 9\n",
      "the classifier came back with: 9 ,the real answer is : 9\n",
      "the classifier came back with: 9 ,the real answer is : 9\n",
      "the classifier came back with: 7 ,the real answer is : 9\n",
      "the classifier came back with: 9 ,the real answer is : 9\n",
      "the classifier came back with: 9 ,the real answer is : 9\n",
      "the classifier came back with: 9 ,the real answer is : 9\n",
      "the classifier came back with: 9 ,the real answer is : 9\n",
      "the classifier came back with: 9 ,the real answer is : 9\n",
      "the classifier came back with: 9 ,the real answer is : 9\n",
      "the classifier came back with: 9 ,the real answer is : 9\n",
      "the classifier came back with: 9 ,the real answer is : 9\n",
      "the classifier came back with: 9 ,the real answer is : 9\n",
      "the classifier came back with: 9 ,the real answer is : 9\n",
      "the classifier came back with: 9 ,the real answer is : 9\n",
      "the classifier came back with: 9 ,the real answer is : 9\n",
      "the classifier came back with: 9 ,the real answer is : 9\n",
      "the classifier came back with: 9 ,the real answer is : 9\n",
      "the classifier came back with: 9 ,the real answer is : 9\n",
      "the classifier came back with: 9 ,the real answer is : 9\n",
      "the classifier came back with: 9 ,the real answer is : 9\n",
      "the classifier came back with: 9 ,the real answer is : 9\n",
      "the classifier came back with: 9 ,the real answer is : 9\n",
      "the classifier came back with: 9 ,the real answer is : 9\n",
      "the classifier came back with: 9 ,the real answer is : 9\n",
      "the classifier came back with: 9 ,the real answer is : 9\n",
      "the classifier came back with: 9 ,the real answer is : 9\n",
      "the classifier came back with: 9 ,the real answer is : 9\n",
      "the classifier came back with: 9 ,the real answer is : 9\n",
      "the classifier came back with: 9 ,the real answer is : 9\n",
      "the classifier came back with: 9 ,the real answer is : 9\n",
      "the classifier came back with: 9 ,the real answer is : 9\n",
      "the classifier came back with: 9 ,the real answer is : 9\n",
      "the classifier came back with: 9 ,the real answer is : 9\n",
      "the classifier came back with: 9 ,the real answer is : 9\n",
      "\n",
      " the total number of errors is : 10\n",
      "\n",
      " the total error rate is : 0.010571\n"
     ]
    }
   ],
   "source": [
    "#测试算法\n",
    "handwritingClassTest()"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "***\n",
    "# 总结"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "- （1）k-近邻算法是基于实例的学习，使用算法时必须有接近实际数据的训练样本数据；\n",
    "- （2）k-近邻算法必须保存全部数据集，如果训练数据集很大，必须使用大量的存储空间；\n",
    "- （3）该算法必须对数据集中的每个数据计算距离值，实际使用时非常耗时；\n",
    "- （4）它的一个缺点是无法给出任何数据的基础结构信息，因此也无法知晓平均实例样本和典型实例样本具体有什么特征；"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": null,
   "metadata": {},
   "outputs": [],
   "source": []
  }
 ],
 "metadata": {
  "kernelspec": {
   "display_name": "Python 3",
   "language": "python",
   "name": "python3"
  },
  "language_info": {
   "codemirror_mode": {
    "name": "ipython",
    "version": 3
   },
   "file_extension": ".py",
   "mimetype": "text/x-python",
   "name": "python",
   "nbconvert_exporter": "python",
   "pygments_lexer": "ipython3",
   "version": "3.8.5"
  },
  "toc": {
   "base_numbering": 1,
   "nav_menu": {},
   "number_sections": true,
   "sideBar": true,
   "skip_h1_title": false,
   "title_cell": "Table of Contents",
   "title_sidebar": "Contents",
   "toc_cell": false,
   "toc_position": {},
   "toc_section_display": true,
   "toc_window_display": true
  }
 },
 "nbformat": 4,
 "nbformat_minor": 4
}
